\documentclass[a4paper,11pt,oneside]{report}
\usepackage[german]{hgb}	 % options: german, english
\graphicspath{{images/}}   	% where are the EPS images?

%%%-----------------------------------------------------------------------------------------------
\begin{document}
%%%-----------------------------------------------------------------------------------------------

\author{Alexander Bohn \\
	     Manuel Djalili \\
	     Dominik Gruber \\
	     Manuel Mayrhofer \\
	     Philipp Naderer}
	     
\title{QSE-ASE-08 \\  
        Tenez \\
        ER-Modell}

\date{November 2009}

%%%-----------------------------------------------------------------------------------------------
\maketitle
\tableofcontents
%%%-----------------------------------------------------------------------------------------------


%%%-----------------------------------------------------------------------------------------------
\chapter{ER-Modell}
%%%-----------------------------------------------------------------------------------------------

\includegraphics[scale=0.30]{er-modell.png}


%%%-----------------------------------------------------------------------------------------------
\chapter{Attributsbeschreibung}
%%%-----------------------------------------------------------------------------------------------

%%%---------------------------------------
\section{Tabelle 'club'}
%%%---------------------------------------
 
Stammdaten eines Vereins
 
\begin{itemize}

\item \textbf{id} (integer) (Primary Key) \\
Eindeutige ID
 
\item \textbf{name} (varchar) (Not Null) \\
Name des Vereins (min. 3 Zeichen lang)

\item \textbf{alias} (varchar) (Not Null) \\
Accessname für die URL

\item \textbf{contact} (integer) (Foreign Key) \\
FK zum Eintrag in der Tabelle 'contact' mit sämtlichen Kontaktdaten

\item \textbf{currency} (integer) (Foreign Key) \\
FK zum Eintrag in der Tabelle 'currency' mit sämtlichen Daten zur eingesetzten Währung im Verein

\item \textbf{currency} (integer) (Foreign Key) \\
FK zum Eintrag in der Tabelle 'currency' mit sämtlichen Daten zur eingesetzten Währung im Verein

\item \textbf{timezone} (varchar) \\
Zeitzone des Vereins, \zB Europe/Vienna

\item \textbf{showuserinfo} (boolean) (Not Null) (Default: True) \\
Gibt an ob im Frontend bei der Reservierungsübersicht angezeigt wird, wer den Timeslot reserviert hat

\item \textbf{cancelationperiod} (integer) (Not Null) (Default: 0) \\
Zeit, in der eine Reservierung durch einen Benutzer storniert werden kann

\item \textbf{reservationperiod} (integer) (Not Null) (Default: 0) \\
Zeitperiode, in der eine Reservierung angelegt werden kann, bevor sie stattfindet. Beispiel: Timeslot: 19:00 - 20:00 Uhr, Reservationperiod: 60 Minuten -> Vornahme einer Reservierung bis 18:00 Uhr möglich.

\item \textbf{active} (boolean) (Not Null) (Default: True) \\
Gibt an ob ein Verein aktiv ist und somit angezeigt wird oder nicht

\end{itemize}


%%%---------------------------------------
\section{Tabelle 'currency'}
%%%---------------------------------------

Daten über verschiedene Währungen. Wird direkt über die Datenbank verwaltet.
 
\begin{itemize}

\item \textbf{id} (integer) (Primary Key) \\
Eindeutige ID
 
\item \textbf{name} (varchar) (Not Null) \\
Name der Währung, \zB Euro (min. 3 Zeichen lang)

\item \textbf{code} (varchar(3)) (Not Null) \\
3-stelliger Code der Währung, \zB EUR

\item \textbf{eurvalue} (numeric(10,2)) (Not Null) \\
Kurs Währung -> Euro

\end{itemize}

 
%%%---------------------------------------
\section{Tabelle 'user'}
%%%---------------------------------------
 
Daten eines Benutzers
 
\begin{itemize}
 
\item \textbf{id} (integer) (Primary Key) \\
Eindeutige ID
 
\item \textbf{createtime} (timestamp) (Not Null) \\
Zeitpunkt der Anlegung des Users

\item \textbf{username} (varchar) (Not Null) (Unique) \\
Eindeutiger Benutzername (min. 5 Zeichen lang)

\item \textbf{password} (varchar) (Not Null) \\
5-stelliges alphanumerisches Passwort, das vom System generiert wird
 
\item \textbf{firstname} (varchar) \\
Vorname
 
\item \textbf{lastname} (varchar) \\
Nachname
 
\item \textbf{company} (varchar) \\
Firmenname
 
\item \textbf{iscompany} (boolean) (Not Null) (Default: False) \\
Gibt an ob der User eine Firma ist

\item \textbf{club} (integer) (Foreign Key) \\
FK zum Verein, dem der User zugehörig ist. Bei Systemadministratoren ist der Wert NULL.
 
\item \textbf{permissiongroup} (integer) (Foreign Key) \\
FK zum Eintrag in der Tabelle 'permissiongroup'

\item \textbf{contact} (integer) (Foreign Key) \\
FK zum Eintrag in der Tabelle 'contact' mit sämtlichen Kontaktdaten

\item \textbf{lastlogin} (timestamp) \\
Zeitpunkt des letzten Logins durch den Benutzer

\item \textbf{active} (boolean) (Not Null) (Default: True) \\
Gibt an ob ein Benutzer aktiv ist und sich somit in das System einloggen darf oder nicht

 \end{itemize}
  
 
 %%%---------------------------------------
\section{Tabelle 'contact'}
%%%---------------------------------------

Kontaktdaten - \zB für User, Verein und Halle

\begin{itemize}
 
\item \textbf{id} (integer) (Primary Key) \\
Eindeutige ID
 
\item \textbf{street} (varchar) \\
Erste Zeile für die Straßenangabe

\item \textbf{street2} (varchar) \\
Zweite Zeile für die Strassenangabe

\item \textbf{city} (integer) (Foreign Key) \\
FK zur Stadt in der Tabelle 'city'

\item \textbf{phone} (varchar) \\
Telefonnummer

\item \textbf{fax} (varchar) \\
Fax

\item \textbf{email} (varchar) \\
E-Mail Adresse

\item \textbf{url} (varchar) \\
URL der Website

 \end{itemize}


%%%---------------------------------------
\section{Tabelle 'city'}
%%%---------------------------------------

Städte eines Landes

\begin{itemize}
 
\item \textbf{id} (integer) (Primary Key) \\
Eindeutige ID
 
\item \textbf{zip} (varchar) \\
Postleitzahl

\item \textbf{name} (varchar) (Not Null) \\
Name der Stadt

\item \textbf{country} (integer) (Foreign Key) (Not Null) \\
FK zum zugehörigen Land in der Tabelle 'country'

 \end{itemize}
 
 
 %%%---------------------------------------
\section{Tabelle 'country'}
%%%---------------------------------------

Länder

\begin{itemize}
 
\item \textbf{id} (integer) (Primary Key) \\
Eindeutige ID

\item \textbf{code} (varchar(3)) (Not Null) \\
3-stelliger Ländercode (ISO 3166 ALPHA-3)
 
\item \textbf{localized\_de} (varchar) (Not Null) \\
Deutscher Name des Landes

 \end{itemize}


%%%---------------------------------------
\section{Tabelle 'usergroup'}
%%%---------------------------------------

Interne Vereinsgruppen (\zB ``Kinder'', ``Senioren''), die über einen Rabatt verfügen können.

\begin{itemize}
 
\item \textbf{id} (integer) (Primary Key) \\
Eindeutige ID
 
\item \textbf{name} (varchar) (Not Null) \\
Eindeutiger Name der Gruppe in Bezug auf einen Verein (min. 3 Zeichen)

\item \textbf{description} (varchar) \\
Beschreibung der Gruppe

\item \textbf{club} (integer) (Not Null) (Foreign Key) \\
FK zum zugehörigen Verein

\item \textbf{discount} (numeric(1,2)) (Not Null) (Default: 0.0) \\
Rabatt, den User der zugehörigen Gruppe erhalten. Muss zwischen 0.0 (kein Rabatt) und 1.0 (gratis) sein.

 \end{itemize}


%%%---------------------------------------
\section{Tabelle 'usergroup\_member'}
%%%---------------------------------------
 
Beziehung zwischen User und Vereinsgruppe. Ein User kann zu mehreren Vereinsgruppen gehören.
 
\begin{itemize}
 
\item \textbf{user} (integer) (Not Null) (Foreign Key) \\
FK zum User

\item \textbf{usergroup} (integer) (Not Null) (Foreign Key) \\
FK zur Usergruppe des Vereins

 \end{itemize}


%%%---------------------------------------
\section{Tabelle 'permissiongroup'}
%%%---------------------------------------

Rechtegruppen - \zB Systemadministrator, Hallenwart, User

\begin{itemize}
 
\item \textbf{id} (integer) (Primary Key) \\
Eindeutige ID
 
\item \textbf{club} (integer) (Not Null) (Foreign Key) \\
FK zum zugehörigen Verein
 
\item \textbf{name} (varchar) (Unique) \\
Eindeutiger Name der Rechtegruppe

 \end{itemize}


%%%---------------------------------------
\section{Tabelle 'permission'}
%%%---------------------------------------

Rechte

\begin{itemize}
 
\item \textbf{id} (integer) (Primary Key) \\
Eindeutige ID
 
\item \textbf{name} (varchar) (Not Null) (Unique) \\
Bezeichnung des Rechts - \zB 'can\_delete\_location' - siehe Systemdokumentation

 \end{itemize}


%%%---------------------------------------
\section{Tabelle 'authorization'}
%%%---------------------------------------

Rechtevergabe an Rechtegruppen

\begin{itemize}
 
\item \textbf{permissiongroup} (integer) (Not Null) (Foreign Key) \\
FK zur Rechtegruppe

\item \textbf{permission} (integer) (Not Null) (Foreign Key) \\
FK zum Recht

 \end{itemize}


%%%---------------------------------------
\section{Tabelle 'location'}
%%%---------------------------------------

Ort - \zB Sporthalle

\begin{itemize}
 
\item \textbf{id} (integer) (Primary Key) \\
Eindeutige ID
 
\item \textbf{club} (integer) (Foreign Key) \\
FK zum Verein, zu dem die Location gehört

\item \textbf{name} (varchar) (Not Null) \\
Name der Location

\item \textbf{alias} (varchar) (Not Null) \\
Accessname für die URL

\item \textbf{description} (varchar) \\
Beschreibung der Location
 
\item \textbf{contact} (integer) (Foreign Key) \\
FK zum Eintrag in der Tabelle 'contact' mit sämtlichen Kontaktdaten

\item \textbf{sortorder} (integer) \\
Dieser Wert wird zur Sortierreihenfolge bei der Ausgabe herangezogen

\item \textbf{active} (boolean) (Not Null) (Default: True) \\
Ob die Halle aktuell in Betrieb ist

 \end{itemize}


%%%---------------------------------------
\section{Tabelle 'court'}
%%%---------------------------------------

Platz in einer Location - \zB Tennishalle A, Squashhalle A

\begin{itemize}
 
\item \textbf{id} (integer) (Primary Key) \\
Eindeutige ID
 
\item \textbf{location} (integer) (Foreign Key) (Not Null) \\
FK zur zugehörigen Location

\item \textbf{name} (varchar) (Not Null) \\
Name des Platzes

\item \textbf{alias} (varchar) (Not Null) \\
Accessname für die URL

\item \textbf{description} (varchar) \\
Beschreibung des Platzes

\item \textbf{sortorder} (integer) \\
Dieser Wert wird zur Sortierreihenfolge bei der Ausgabe herangezogen

\item \textbf{active} (boolean) (Not Null) (Default: True) \\
Ob der Platz aktuell in Betrieb ist

 \end{itemize}


%%%---------------------------------------
\section{Tabelle 'timeslot'}
%%%---------------------------------------

Zeitspannen, zu denen ein Platz gemietet werden kann

\begin{itemize}
 
\item \textbf{id} (integer) (Primary Key) \\
Eindeutige ID


\item \textbf{timestart} (time) (Not Null) \\
Uhrzeit des Starts - \zB 8:00

\item \textbf{timeend} (time) (Not Null) \\
Uhrzeit des Endes - \zB 20:00

\item \textbf{slotsize} (numeric(2,2)) (Not Null) (Default: 1.0) \\
Intervallsprünge in dem Zeitraum - \zB 1.0 für stündlich

\item \textbf{periodstart} (timestamp) (Not Null) \\
Beginn des Gültigkeitszeitraum für den Timeslot

\item \textbf{periodend} (timestamp) \\
Ende des Gültigkeitszeitraums. NULL, wenn unbegrenzt gültig.

\item \textbf{daymask} (varchar) (Not Null) (Default: 1111111)  \\
Maske, die angibt an welchen Wochentagen der Zeitslot gültig ist. 1 bedeutet gültig, 0 ungültig. Erstes Zeichen v.l. steht für Montag etc.

\item \textbf{price} (numeric(10,2)) (Not Null) \\
Preis für die Reservierung eines Intervalls

 \end{itemize}


%%%---------------------------------------
\section{Tabelle 'reservation'}
%%%---------------------------------------

Reservierung eines Intervalls für einen Platz durch einen User

\begin{itemize}
 
\item \textbf{id} (integer) (Primary Key) \\
Eindeutige ID
 
\item \textbf{user} (integer) (Not Null) (Foreign Key) \\
FK zum User, der die Reservierung getätigt hat

\item \textbf{timeslot} (integer) (Not Null) (Foreign Key) \\
FK zur Zeitspanne, in der sich das Intervall befindet

\item \textbf{date} (date) (Not Null) \\
Zeitpunkt, zu dem die Reservierung getätigt wurde

\item \textbf{timestart} (date) (Not Null) \\
Beginn der Reservierung

\item \textbf{time} (date) (Not Null) \\
Ende der Reservierung

 \end{itemize}


 %%%---------------------------------------
\section{Tabelle 'transaction'}
%%%---------------------------------------

 \begin{itemize}

\item \textbf{id} (integer) (Primary Key) \\
Eindeutige ID
 
\item \textbf{user} (integer) (Not Null) (Foreign Key) \\
FK zum User

\item \textbf{date} (timestamp) (Not Null) \\
Zeitpunkt der Transaktion

\item \textbf{grossvalue} (numeric(10,2)) (Not Null) \\
Wert der Reservierung

\item \textbf{discount} (numeric(1,2)) (Not Null) (Default: 0.0) \\
Gegebener Rabatt - \zB 0.0 (keiner), 0.1 (10\%) ... 1.0 (gratis)

\item \textbf{price} (numeric(10,2)) (Not Null) \\
Tatsächlich bezahlter Preis

\item \textbf{action} (varchar) (Not Null) \\
Aktion - \zB Aufbuchung, Reservierung

\item \textbf{reservation} (integer) (Foreign Key) \\
FK zur evtl. zugehörigen Reservierung

 \end{itemize}
 
 
%%%---------------------------------------
\section{Tabelle 'newsletter'}
%%%---------------------------------------

 \begin{itemize}

\item \textbf{id} (integer) (Primary Key) \\
Eindeutige ID
 
\item \textbf{club} (integer) (Not Null) (Foreign Key) \\
FK zum Club

\item \textbf{user} (integer) (Not Null) (Foreign Key) \\
FK zum User (= Absender)

\item \textbf{date} (timestamp) (Not Null) \\
Zeitpunkt des Sendens

\item \textbf{subject} (varchar) (Not Null) \\
Titel

\item \textbf{body} (varchar) (Not Null) \\
Inhalt

 \end{itemize}
 
 
%%%---------------------------------------
\section{Tabelle 'newsletter\_receiver'}
%%%---------------------------------------

 \begin{itemize}

\item \textbf{id} (integer) (Primary Key) \\
Eindeutige ID
 
\item \textbf{newsletter} (integer) (Not Null) (Foreign Key) \\
FK zum Newsletter
 
\item \textbf{user} (integer) (Not Null) (Foreign Key) \\
FK zum Mitglied

 \end{itemize}


%%%---------------------------------------
\section{Tabelle 'log'}
%%%---------------------------------------

Log Einträge über sämtliche Aktionen im System

\begin{itemize}
 
\item \textbf{id} (integer) (Primary Key) \\
Eindeutige ID
 
\item \textbf{date} (timestamp) (Not Null) \\
Zeitpunkt der Aktion
 
\item \textbf{club} (integer) (Foreign Key) \\
FK zum Club, den die Aktion betroffen hat
 
\item \textbf{user} (integer) (Foreign Key) \\
FK zum User, die Aktion ausgelöst hat
 
\item \textbf{ip} (varchar) (Not Null) \\
IP-Adresse des Users

\item \textbf{accesspoint} (varchar) (Not Null) \\
Über welche Oberfläche (Frontend, Mobile Frontend, Backend, Terminal) die Aktion durchgeführt wurde
 
\item \textbf{action} (varchar) (Not Null) \\
Art der Aktion - \zB Login
 
\item \textbf{value} (varchar) (Not Null) \\
JSON Object mit Informationen über die Aktion und die betroffenen Objekte

 \end{itemize}
 

%%%-----------------------------------------------------------------------------------------------
\end{document}
%%%-----------------------------------------------------------------------------------------------